package persistencia;

import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

/**
 * Classe simples que baixar um ou mais arquivos WSDL
 * 
 */

public class DownloadWSDL {
	private String uri;
	private ArrayList<String> wsdlsBaixados;
	private String erro;

	public DownloadWSDL() {
		uri = null;
		wsdlsBaixados = new ArrayList<String>();
	}
	
	public DownloadWSDL(String uri) {
		this.uri = uri;
		wsdlsBaixados = new ArrayList<String>();
	}
	
	/** Baixa o arquivo wsdl */
	public void baixar(String pasta){
		String arquivo = nomeDoArquivo();
		try{
            if(arquivo.endsWith(".wsdl") || arquivo.endsWith("?wsdl")){
				// Cria um arquivo de acordo com o nome do arquivo a ser baixado
	            File diretorioWSDL = new File(pasta + "WSDL's");
	            diretorioWSDL.mkdir();
	            File file = new File(diretorioWSDL.getAbsolutePath() + "/" + arquivo);
	            arquivo = file.getAbsolutePath();
	            OutputStream out = new FileOutputStream(file, false);  
	              
	            URL url = new URL(uri);  
	            URLConnection conn = url.openConnection();  
	            System.out.printf("Baixando: %s\n", uri);                          
	            
	            InputStream in = conn.getInputStream();  
	              
	            int i = 0;  
	            while ((i = in.read()) != -1){  
	                out.write(i);  
	            }  
	            in.close();  
	            out.close(); 
	            wsdlsBaixados.add(arquivo);
	            System.out.printf("Download concluído\nSalvo em %s\n", arquivo);  
            }
            else{
            	throw new MalformedURLException("A URL \"" + getUri() + "\" não é uma URL válida.");
            }
        }  
          
        catch (FileNotFoundException e){  
            erro = "Arquivo não encontrado. Causa: \"" + e.getMessage() + "\" não é uma URL válida."; 
            new File(arquivo).delete();
        }  
        catch (MalformedURLException e){  
            erro = "Erro na formação da URL. Causa: " + e.getMessage();
            new File(arquivo).delete();
        }  
        catch (IOException e){  
        	erro = "Erro de entrada/saida de dados. Causa: " + e.getMessage();
            new File(arquivo).delete();
        }     
	}
	
	/** Método para salvar o arquivo com o nome do arquivo baixado */
	public String nomeDoArquivo(){
		return uri.substring(uri.lastIndexOf("/") + 1, uri.length());
	}

	public String getUri() {
		return uri;
	}

	public void setUri(String uri) {
		this.uri = uri;
	}
	
	/** Retorna o caminho da pasta de todos os wsdls baixados */
	public ArrayList<String> getWsdlsBaixados() {
		return wsdlsBaixados;
	}

	public void setWsdlsBaixados(ArrayList<String> wsdlsBaixados) {
		this.wsdlsBaixados = wsdlsBaixados;
	}
	
	public String erro(){
		return erro;
	}
}
